Streams are for await-able; elements arrive bare (T | E), so a hand-rolled loop
discriminates with Failure.is exactly like any other union consumer.
const seen: number[] = [];
for await (const element of Stream.from([1, 2])) seen.push(element);
seen; // [1, 2]